package com.itheima.config;

import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Knife4j配置类
 * 用于生成API文档和提供接口测试功能
 * 访问地址：http://localhost:8080/doc.html
 */
@Configuration
public class Knife4jConfig {

    /**
     * API信息配置
     */
    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                .info(new Info()
                        .title("TLIAS智能学习辅助系统API文档")
                        .description("包含部门、员工、学生管理等功能")
                        .version("1.0.0")
                        .contact(new Contact().name("itheima").email("dev@itheima.com")))
                .components(new Components()
                        .addSecuritySchemes("token", new SecurityScheme()
                                .type(SecurityScheme.Type.APIKEY)
                                .in(SecurityScheme.In.HEADER)
                                .name("token")
                                .description("JWT Token")))
                .addSecurityItem(new SecurityRequirement().addList("token"));
    }

    /**
     * 部门管理API分组
     */
    @Bean
    public GroupedOpenApi deptApi() {
        return GroupedOpenApi.builder()
                .group("部门管理")
                .pathsToMatch("/depts/**")
                .build();
    }

    /**
     * 员工管理API分组
     */
    @Bean
    public GroupedOpenApi empApi() {
        return GroupedOpenApi.builder()
                .group("员工管理")
                .pathsToMatch("/emps/**")
                .build();
    }

    /**
     * 学生管理API分组
     */
    @Bean
    public GroupedOpenApi studentApi() {
        return GroupedOpenApi.builder()
                .group("学生管理")
                .pathsToMatch("/students/**")
                .build();
    }

    /**
     * 班级管理API分组
     */
    @Bean
    public GroupedOpenApi clazzApi() {
        return GroupedOpenApi.builder()
                .group("班级管理")
                .pathsToMatch("/clazzs/**")
                .build();
    }

    /**
     * 系统管理API分组（登录、日志、报表、上传等）
     */
    @Bean
    public GroupedOpenApi loginApi() {
        return GroupedOpenApi.builder()
                .group("用户登录")
                .pathsToMatch("/login", "/logout")
                .build();
    }

    /**
     * 日志管理API分组
     */
    @Bean
    public GroupedOpenApi logApi() {
        return GroupedOpenApi.builder()
                .group("日志管理")
                .pathsToMatch("/log/**")
                .build();
    }

    /**
     * 统计报表API分组
     */
    @Bean
    public GroupedOpenApi reportApi() {
        return GroupedOpenApi.builder()
                .group("统计报表")
                .pathsToMatch("/report/**")
                .build();
    }

    /**
     * 文件上传API分组
     */
    @Bean
    public GroupedOpenApi uploadApi() {
        return GroupedOpenApi.builder()
                .group("文件上传")
                .pathsToMatch("/upload/**")
                .build();
    }

    /**
     * 全部接口分组
     */
    @Bean
    public GroupedOpenApi allApi() {
        return GroupedOpenApi.builder()
                .group("全部接口")
                .pathsToMatch("/**")
                .build();
    }
}